package br.com.rhinovet.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.rhinovet.entidade.Consulta;
import br.com.rhinovet.logica.contract.ConsultaLogicaContract;
import br.com.rhinovet.util.FacesUtil;
import br.com.rhinovet.util.StringUtil;

@ManagedBean(name="buscaConsultaFaces")
@ViewScoped
public class BuscaConsultaFaces extends FacesUtil {
	
	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{consultaLogica}")
	private ConsultaLogicaContract logicaConsulta;
	
	private Consulta consulta;
	private List<Consulta> listaConsulta = new ArrayList<>();
	private String pesquisaNomeProprietario;
	private String pesquisaNomeAnimal;

	public void prepararAdicionar() {
		getSession().setAttribute("consultaSelecionada", null);
		getSession().setAttribute("proprietarioConsulta", null);
		redirecionarPagina("consulta.faces");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.consulta = logicaConsulta.obterPorId(Consulta.class,idArea);
			if (editar) {
				getSession().setAttribute("consultaSelecionada", this.consulta);
				redirecionarPagina("consulta.faces");
			} else {
				abrirModal("dialogArquivar");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void arquivar() {
		try {
			this.consulta.setArquivo(true);
			logicaConsulta.editar(this.consulta);
			
			this.buscarConsulta();
			fecharModal("dialogArquivar");
		} catch (Exception e) {
			adicionarMensagem("Não foi possível arquivar a consulta");
		}
		
	}
	
	public void buscarConsulta() {
		if (listaConsulta != null) {
			this.listaConsulta.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(pesquisaNomeAnimal) && !StringUtil.textoPreenchido(pesquisaNomeProprietario)) {
				this.listaConsulta =  logicaConsulta.buscarConsultas(true);
			} else {
				this.listaConsulta = logicaConsulta.buscarConsultaPorCampos(pesquisaNomeProprietario, pesquisaNomeAnimal);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public void setLogicaConsulta(ConsultaLogicaContract logicaConsulta) {
		this.logicaConsulta = logicaConsulta;
	}

	public Consulta getConsulta() {
		return consulta;
	}

	public void setConsulta(Consulta consulta) {
		this.consulta = consulta;
	}

	public List<Consulta> getListaConsulta() {
		return listaConsulta;
	}

	public void setListaConsulta(List<Consulta> listaConsulta) {
		this.listaConsulta = listaConsulta;
	}

	public String getPesquisaNomeProprietario() {
		return pesquisaNomeProprietario;
	}

	public void setPesquisaNomeProprietario(String pesquisaNomeProprietario) {
		this.pesquisaNomeProprietario = pesquisaNomeProprietario;
	}

	public String getPesquisaNomeAnimal() {
		return pesquisaNomeAnimal;
	}

	public void setPesquisaNomeAnimal(String pesquisaNomeAnimal) {
		this.pesquisaNomeAnimal = pesquisaNomeAnimal;
	}

	
	
}